package com.jyw.business.obstacles.service;

import java.util.List;

import com.jyw.business.obstacles.domain.ObsOrderFault;
import com.jyw.business.obstacles.domain.ObsOrderMake;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jyw.business.obstacles.domain.dto.web.*;
import com.jyw.business.obstacles.domain.dto.wechat.EvaluateOrderDto;
import com.jyw.business.obstacles.domain.vo.web.MineOrderCountVO;
import com.jyw.business.obstacles.domain.vo.web.MineOrderPageVO;
import com.jyw.business.obstacles.domain.vo.wechat.WxWorkOrderReceiveVO;

/**
 * 报障-工单处理Service接口
 *
 * @author system
 * @date 2023-08-11
 */
public interface IObsOrderMakeService extends IService<ObsOrderMake> {
    /**
     * 查询报障-工单处理
     *
     * @param id 报障-工单处理主键
     * @return 报障-工单处理
     */
    public ObsOrderMake selectObsOrderMakeById(Long id);

    /**
     * 查询报障-工单处理列表
     *
     * @param obsOrderMake 报障-工单处理
     * @return 报障-工单处理集合
     */
    public List<ObsOrderMake> selectObsOrderMakeList(ObsOrderMake obsOrderMake);

    /**
     * 新增报障-工单处理
     *
     * @param obsOrderMake 报障-工单处理
     * @return 结果
     */
    public int insertObsOrderMake(ObsOrderMake obsOrderMake);

    /**
     * 修改报障-工单处理
     *
     * @param obsOrderMake 报障-工单处理
     * @return 结果
     */
    public int updateObsOrderMake(ObsOrderMake obsOrderMake);

    /**
     * 批量删除报障-工单处理
     *
     * @param ids 需要删除的报障-工单处理主键集合
     * @return 结果
     */
    public int deleteObsOrderMakeByIds(Long[] ids);

    /**
     * 删除报障-工单处理信息
     *
     * @param id 报障-工单处理主键
     * @return 结果
     */
    public int deleteObsOrderMakeById(Long id);

    /**
     * 接单
     *
     * @param orderDto
     */
    void receive(ReceiveOrderDto orderDto);

    /**
     * 完成工单
     *
     * @param orderDto
     */
    void complete(CompleteOrderDto orderDto);

    /**
     * 评价
     *
     * @param dto
     */
    void evaluate(EvaluateOrderDto dto);

    /**
     * 查询最新的处理信息
     */
    ObsOrderMake getMakeByOrderNum(String orderNum);

    /**
     * 微信查询接单信息
     *
     * @param orderNum
     * @return
     */
    WxWorkOrderReceiveVO getInfoByOrderNum(String orderNum);

    /**
     * 处理工单
     *
     * @param orderDto
     */
    void make(MakeOrderDto orderDto);

    /**
     * 协作工单
     *
     * @param orderDto
     */
    void assist(AssistOrderDto orderDto);

    /**
     * 工单升级
     *
     * @param orderDto
     */
    void upgrade(OrderUpgradeDto orderDto);

    /**
     * 退单
     *
     * @param orderDto
     */
    void reback(OrderRebackDto orderDto);

    /**
     * 暂停
     *
     * @param orderDto
     */
    void suspend(OrderSuspendDto orderDto);

    /**
     * 开启
     *
     * @param orderDto
     */
    void open(BaseOrderDto orderDto);

    /**
     * 终止工单
     *
     * @param orderDto
     */
    void termination(OrderTerminationDto orderDto);

    /**
     * 重启工单
     *
     * @param orderDto
     */
    void restart(BaseOrderDto orderDto);

    /**
     * 转单
     *
     * @param orderDto
     */
    void redirect(OrderRedirectDto orderDto);

    /**
     * 查询协作工单
     *
     * @param orderNum
     * @return
     */
    public List<ObsOrderFault> getChildOrder(String orderNum);

    /**
     * 撤销审核
     *
     * @param orderDto
     */
    void revokeReview(BaseOrderDto orderDto);

    /**
     * 我的工单分页查询
     *
     * @param pageDto
     * @return
     */
    List<MineOrderPageVO> orderPage(MineOrderPageDto pageDto);

    /**
     * 我的工单数据统计
     * @return
     */
    MineOrderCountVO orderPageCount();
}
